#include <stdlib.h>
#include <string.h>
#include "snmprdbms_ds.h"
#include "snmprdbms.h"

static void **snmprdbms_datastore;

void *config_init_datastore() {
  snmprdbms_datastore = calloc(DS_SIZE,  sizeof(*snmprdbms_datastore) );
  return snmprdbms_datastore;
}

//INTEGER
int snmprdbms_ds_get_int(int id) {
  if ( id <= DS_SIZE )
    if (snmprdbms_datastore[id] != NULL)
        return *((int *)snmprdbms_datastore[id]);

  return SNMPRDBMS_ERROR;
}

int snmprdbms_ds_set_int(int id, int value) {
  if ( id > DS_SIZE )
    return SNMPRDBMS_ERROR;

  snmprdbms_datastore[id] = malloc(sizeof(int));
  if ( (snmprdbms_datastore[id] == NULL)
       || (memcpy(snmprdbms_datastore[id], &value, sizeof(int) ) == NULL) )
    return SNMPRDBMS_ERROR;
  else
    return SNMPRDBMS_SUCCESS;
}

//STRINGS
char *snmprdbms_ds_get_string(int id) {
  if ( id > DS_SIZE )
    return (char *) SNMPRDBMS_ERROR;
  return (char *) snmprdbms_datastore[id];
}

int snmprdbms_ds_set_string(int id, char *value) {
  if ( id > DS_SIZE )
    return SNMPRDBMS_ERROR;
  snmprdbms_datastore[id] = strdup(value);
  if ( snmprdbms_datastore[id] == 0 )
    return SNMPRDBMS_ERROR;
  else
    return SNMPRDBMS_SUCCESS;
}

//POINTERS
void *snmprdbms_ds_get_void(int id) {

  if ( id > DS_SIZE )
    return (void *) SNMPRDBMS_ERROR;

  return (void *) snmprdbms_datastore[id];
}

int snmprdbms_ds_set_void(int id, void *value) {
  if ( id > DS_SIZE )
    return SNMPRDBMS_ERROR;

  snmprdbms_datastore[id] = value;
  return SNMPRDBMS_SUCCESS;
}

